home *** CD-ROM | disk | FTP | other *** search
/ Aminet 19 / Aminet 19 (1997)(GTI - Schatztruhe)[!][Jun 1997].iso / Aminet / demo / mag / trash3_2.lha / fuentes / FuentesFXC2P.lha / FXC2P.LineaBresenham < prev    next >
Text File  |  1980-01-14  |  5KB  |  256 lines

  1.  
  2. * FX_Linea
  3. * Rutina de lineas mediante el algoritmo de Bresenham
  4. * Enteramente programada por Xele/Odrusba
  5.  
  6. ;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
  7. ; PIX.B           =  Color con el que se quiere pintar     |     Esquema de             5  4  3                                     
  8. ; d0.W , d1.W  =  X1 , Y1                                |     los 8 tipos             \ | /                                         
  9. ; d2.W , d3.W  =  X2 , Y2                                |     de línea:            6 ---·--- 2                                         
  10. ; A5.L           =  *Buffer Chunky                         |                             / | \                                           
  11. ;                                                        |                            7  0  1  
  12. ;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
  13.  
  14. FX_Linea    ;SUBRUTINA
  15.  
  16. ;////////////////////////////////////////////// Determinar Tipo de Línea
  17.  
  18.     cmp.w    d0,d2
  19.     beq.s    .Tipos_0_4    ;x2 = x1 ?
  20.     bgt.s    .Tipos_1_2_3    ;x2 > x1 ?
  21.     bra.s    .Tipos_5_6_7    ;x2 < x1
  22.  
  23. .Tipos_0_4    ;********************************
  24.  
  25.     cmp.w    d1,d3
  26.     bgt.s    .Tipo_0        ;y2  > y1 ?
  27. ;    bra.s    .Tipo_4        ;y2 =< y1
  28.  
  29. .Tipo_4    ;>>>>>>>>>>>>>>>>>>>>>>>> Tipo 4
  30.  
  31.     exg    d1,d3
  32.  
  33. .Tipo_0    ;>>>>>>>>>>>>>>>>>>>>>>>> Tipo 0
  34.  
  35.     movem.l    d6/d7/a5,-(sp)
  36.     move.w    d3,d6
  37.     sub.w    d1,d6        ;D6 = DeltaY
  38.  
  39.     moveq    #0,d7
  40.     move.w    d6,d7
  41. .Bucle0
  42.     bsr    FX_Punto
  43.     add.w    #1,d1
  44.     dbra    d7,.Bucle0
  45.  
  46.     Movem.l    (sp)+,d6/d7/a5
  47.     rts
  48.  
  49. .Tipos_5_6_7    ;********************************
  50.  
  51.     exg    d0,d2
  52.     exg    d1,d3
  53.  
  54. .Tipos_1_2_3    ;********************************
  55.  
  56.     cmp.w    d1,d3
  57.     bgt    .Tipo_1        ;y2 > y1 ?
  58.     beq    .Tipo_2        ;y2 = y1 ?
  59. ;    bra    .Tipo_3        ;y2 < y1
  60.  
  61. .Tipo_3    ;>>>>>>>>>>>>>>>>>>>>>>>> Tipo 3
  62.  
  63.     Movem.l    d5-d7/a5,-(sp)
  64.  
  65.     move.w    d2,d5
  66.     sub.w    d0,d5        ;D5 = DeltaX
  67.     move.w    d1,d6
  68.     sub.w    d3,d6        ;D6 = DeltaY
  69.  
  70.     cmp.w    d6,d5        ;DeltaX > DeltaY ?
  71.     bgt    .Tipo3_A    ;DeltaX Mayor
  72.     beq    .Tipo3_B    ;Deltas iguales
  73. ;    bra.s    .Tipo3_C    ;DeltaY Mayor
  74.  
  75. .Tipo3_C    ;--------------------------------
  76.  
  77.     move.w    d5,d2
  78.     lsl.w    #1,d2
  79.     sub.w    d6,d2        ;d2 =  (2 * DeltaX) - DeltaY
  80.         
  81.     moveq    #0,d7
  82.     move.w    d6,d7
  83. .Bucle3C
  84.     bsr    FX_Punto
  85.     tst.w    d2
  86.     bgt    .IncX3C
  87.  
  88. .NoIncX3C
  89.     move.w    d5,d3
  90.     lsl.w    #1,d3    
  91.     add.w    d3,d2        ;d2 = d2 + (2 * Delta X)
  92.     bra.s    .Sigue3C
  93. .IncX3C
  94.     move.w    d5,d3
  95.     sub.w    d6,d3
  96.     lsl.w    #1,d3
  97.     add.w    d3,d2        ;d2 = d2 + 2 * (DeltaX - DeltaY)
  98.     add.w    #1,d0        ;x1 = x1 + 1
  99.  
  100. .Sigue3C
  101.     sub.w    #1,d1        ;y1 = y1 + 1
  102.     dbra    d7,.Bucle3C
  103.  
  104.     Movem.l    (sp)+,d5-d7/a5
  105.     rts
  106.  
  107. .Tipo3_B    ;--------------------------------
  108.     moveq    #0,d7
  109.     move.w    d5,d7
  110. .Bucle3B
  111.     bsr    FX_Punto
  112.     add.w    #1,d0
  113.     sub.w    #1,d1
  114.     dbra    d7,.Bucle3B
  115.  
  116.     Movem.l    (sp)+,d5-d7/a5
  117.     rts
  118.  
  119. .Tipo3_A    ;--------------------------------
  120.     move.w    d6,d2
  121.     lsl.w    #1,d2
  122.     sub.w    d5,d2        ;d2 =  (2 * DeltaY) - DeltaX
  123.         
  124.     moveq    #0,d7
  125.     move.w    d5,d7
  126. .Bucle3A
  127.     bsr    FX_Punto
  128.     tst.w    d2
  129.     bgt    .IncY3A
  130.  
  131. .NoIncY3A
  132.     move.w    d6,d3
  133.     lsl.w    #1,d3    
  134.     add.w    d3,d2        ;d2 = d2 + (2 * Delta Y)
  135.     bra.s    .Sigue3A
  136. .IncY3A
  137.     move.w    d6,d3
  138.     sub.w    d5,d3
  139.     lsl.w    #1,d3
  140.     add.w    d3,d2        ;d2 = d2 + 2 * (DeltaY - DeltaX)
  141.     sub.w    #1,d1        ;y1 = y1 + 1
  142.  
  143. .Sigue3A
  144.     add.w    #1,d0        ;x1 = x1 + 1
  145.     dbra    d7,.Bucle3A
  146.  
  147.     Movem.l    (sp)+,d5-d7/a5
  148.     rts
  149.  
  150. .Tipo_2    ;>>>>>>>>>>>>>>>>>>>>>>>> Tipo 2
  151.  
  152.     movem.l    d5/d7/a5,-(sp)
  153.     move.w    d2,d5
  154.     sub.w    d0,d5        ;D5 = DeltaX
  155.  
  156.     moveq    #0,d7
  157.     move.w    d5,d7
  158. .Bucle2
  159.     bsr    FX_Punto
  160.     add.w    #1,d0
  161.     dbra    d7,.Bucle2
  162.  
  163.     Movem.l    (sp)+,d5/d7/a5
  164.     rts
  165.     
  166. .Tipo_1    ;>>>>>>>>>>>>>>>>>>>>>>>> Tipo 1
  167.  
  168.     Movem.l    d5-d7/a5,-(sp)
  169.  
  170.     move.w    d2,d5
  171.     sub.w    d0,d5        ;D5 = DeltaX
  172.     move.w    d3,d6
  173.     sub.w    d1,d6        ;D6 = DeltaY
  174.  
  175.     cmp.w    d6,d5        ;DeltaX > DeltaY ?
  176.     bgt    .Tipo1_A    ;DeltaX Mayor
  177.     beq    .Tipo1_B    ;Deltas iguales
  178. ;    bra.s    .Tipo1_C    ;DeltaY Mayor
  179.  
  180. .Tipo1_C    ;--------------------------------
  181.  
  182.     move.w    d5,d2
  183.     lsl.w    #1,d2
  184.     sub.w    d6,d2        ;d2 =  (2 * DeltaX) - DeltaY
  185.         
  186.     moveq    #0,d7
  187.     move.w    d6,d7
  188. .Bucle1C
  189.     bsr    FX_Punto
  190.     tst.w    d2
  191.     bgt    .IncX1C
  192.  
  193. .NoIncX1C
  194.     move.w    d5,d3
  195.     lsl.w    #1,d3    
  196.     add.w    d3,d2        ;d2 = d2 + (2 * Delta X)
  197.     bra.s    .Sigue1C
  198. .IncX1C
  199.     move.w    d5,d3
  200.     sub.w    d6,d3
  201.     lsl.w    #1,d3
  202.     add.w    d3,d2        ;d2 = d2 + 2 * (DeltaX - DeltaY)
  203.     add.w    #1,d0        ;x1 = x1 + 1
  204.  
  205. .Sigue1C
  206.     add.w    #1,d1        ;y1 = y1 + 1
  207.     dbra    d7,.Bucle1C
  208.  
  209.     Movem.l    (sp)+,d5-d7/a5
  210.     rts
  211.  
  212. .Tipo1_B    ;--------------------------------
  213.     moveq    #0,d7
  214.     move.w    d5,d7
  215. .Bucle1B
  216.     bsr    FX_Punto
  217.     add.w    #1,d0
  218.     add.w    #1,d1
  219.     dbra    d7,.Bucle1B
  220.  
  221.     Movem.l    (sp)+,d5-d7/a5
  222.     rts
  223.  
  224. .Tipo1_A    ;--------------------------------
  225.     move.w    d6,d2
  226.     lsl.w    #1,d2
  227.     sub.w    d5,d2        ;d2 =  (2 * DeltaY) - DeltaX
  228.         
  229.     moveq    #0,d7
  230.     move.w    d5,d7
  231. .Bucle1A
  232.     bsr    FX_Punto
  233.     tst.w    d2
  234.     bgt    .IncY1A
  235.  
  236. .NoIncY1A
  237.     move.w    d6,d3
  238.     lsl.w    #1,d3    
  239.     add.w    d3,d2        ;d2 = d2 + (2 * Delta Y)
  240.     bra.s    .Sigue1A
  241. .IncY1A
  242.     move.w    d6,d3
  243.     sub.w    d5,d3
  244.     lsl.w    #1,d3
  245.     add.w    d3,d2        ;d2 = d2 + 2 * (DeltaY - DeltaX)
  246.     add.w    #1,d1        ;y1 = y1 + 1
  247.  
  248. .Sigue1A
  249.     add.w    #1,d0        ;x1 = x1 + 1
  250.     dbra    d7,.Bucle1A
  251.  
  252.     Movem.l    (sp)+,d5-d7/a5
  253.     rts
  254.  
  255.         ;FINSUB
  256.